package com.hhs.storage.bean;

import com.alibaba.fastjson.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.hhs.storage.util.SysUtil;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * <p>
 * 项目计划
 * </p>
 *
 * @author hhs
 * @since 2023-01-13
 */
@Data
public class ProjectPlan implements Serializable {
    /**
     * 未完成
     */
    public static final Integer STATE_UNCOMPLETED = 0;
    /**
     * 状态完成
     */
    public static final Integer STATE_COMPLETE = 1;

    private static final long serialVersionUID = 1L;

      private String id;

      /**
     * 项目计划名称
     */
      private String name;

      /**
     * 计划内容
     */
      private String content;

      /**
     * 状态0-未完成 1-完成
     */
      private Integer state;

      /**
     * 创建人用户id
     */
      private String userId;

      /**
     * 开始时间
     */
      @JSONField(format="yyyy-MM-dd")
      @DateTimeFormat(pattern = "yyyy-MM-dd")
      private LocalDate startTime;

      /**
     * 结束时间
     */
      @JSONField(format="yyyy-MM-dd")
      @DateTimeFormat(pattern = "yyyy-MM-dd")
      private LocalDate endTime;

      /**
     * 创建时间
     */
      @JSONField(format="yyyy-MM-dd HH:mm:ss")
      @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
      private LocalDateTime createTime;
    /**
     * 完成时间
     */
    @JSONField(format="yyyy-MM-dd HH:mm:ss")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime completeTime;

      /**
     * 备注[未完成的原因]
     */
      private String reason;
    /**
     * 项目的目的
     */
    private String remark;
    /**
     * 进度
     */
    private Integer progress;
    /**
     * 进度(天)
     */
    private Integer progressDay;
    /**
     * 初始奖金-个人项目奖金总额
     */
    private Double initialBonus=0d;
    /**
     * 额外奖金
     */
    private Double additionalBonus=0d;
    /**
     * 项目星级
     */
    private int rate;

    /**
     * 资金总额
     */
    private Double totalMoney;
    /**
     * 回收
     */
    private Double progressMoney;
    /**
     * 关联
     */
    private Integer glGx;
    private Integer glZj;
    private Integer glTs;
    private Integer agreeTime;
    /**
     * 项目类型
     */
    private int projectType;
    /**
     * 创建人信息
     */
    @TableField(exist = false)
    private BaseUser user;
    /**
     * 负责人信息
     */
    @TableField(exist = false)
    private BaseUser header;
    /**
     * 项目计划成员信息
     */
    @TableField(exist = false)
    private List<ProjectMember> projectMemberList=new ArrayList<>();
    /**
     * 项目工序信息
     */
    @TableField(exist = false)
    private List<SubWkFlow> projectWorkFlowList=new ArrayList<>();
    /**
     * 参与人身份用于查询
     */
    @TableField(exist = false)
    private  Integer identityType;
    /**
     * 多个人员ids
     */
    @TableField(exist = false)
    private  String memberIds;
    /**
     * 总工序个数
     */
    @TableField(exist = false)
    private Integer totalStep;
    /**
     * 当前完成工序个数
     */
    @TableField(exist = false)
    private Integer currentStep;
    /**
     * 项目成员id
     */
    @TableField(exist = false)
    private String memberId;
    /**
     * 项目成员个人进度
     */
    @TableField(exist = false)
    private Integer memberProgress;

    //公司或部门id
    private String departId;
    //项目编号
    private String projectCode;
    //项目归类
    private int ttype;
    /**
     *收藏
     */
    @TableField(exist = false)
    private Integer favorate;
    //公司或部门名称
    @TableField(exist = false)
    private String departName;

    @TableField(exist = false)
    private int attC;
    /**
     * 用以前端页面来识别是不是新增
     * 0为新增 1 为详情 2为编辑
     */
    @TableField(exist = false)
    private Integer type;
    /**
     *
     */
    @TableField(exist = false)
    private Integer leaveWordC;


    /**
     * 获取状态名
     * @return
     */
    public String getStateName(){
        return SysUtil.PLAN_STATE_MAP.get(this.state);
    }

    /**
     * 拥有编辑记录权限的用户id
     * @return
     */
    public List<String> getEditPermissionUserIds(){
        List<String> list=new ArrayList<>();
        for (int i = 0; i < projectMemberList.size(); i++) {
            ProjectMember member=projectMemberList.get(i);
            //项目负责人有权限编辑
            if (member.getIdentityType().equals(ProjectMember.IDENTITY_IDENTITY_TYPE_HEADER)){
                list.add(member.getUserId());
            }

        }
        return list;
    }


}
